/*
 * 项目名称:cx-server
 * 类名称:KbDirectoryService.java
 * 包名称:com.ft.oa.modules.kb.service
 *
 * 修改履历:
 *     日期                       修正者        主要内容
 *     2022-01-18 11:36:00        zw     初版做成
 *
 * Copyright (c) 2019-2019 启元软件
 */
package com.ft.oa.service.knowledgeBase;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ft.oa.domain.Attachment;
import com.ft.oa.domain.dto.knowledgeBase.AttachmentDto;
import com.ft.oa.domain.dto.knowledgeBase.KBPage;
import com.ft.oa.domain.knowledgeBase.Directory;
import com.ft.oa.domain.vo.knowledgeBase.DirectoryTree;


import java.util.List;
import java.util.Map;

/**
 * 知识库目录表Service接口
 *
 * @author zw
 * @date 2022-01-18 11:36:00
 */
public interface DirectoryService extends IService<Directory>
{

    /**
     * 添加
     *
     * @param directory
     * @return
     */
    boolean add(Directory directory);

    /**
     * @param directory
     * @return
     */
    boolean update(Directory directory);

    /**
     * @param id
     * @return
     */
    boolean remove(Long id);

    /**
     * 获取 知识库内容
     *
     * @return
     */
    List<Directory> getDirectoryList();

    /**
     * @param kbPage
     * @return
     */
    IPage<Attachment> getAttList(KBPage kbPage);

    /**
     * @param kbPage
     * @return
     */
    IPage<Attachment> getAttProList(KBPage kbPage);

    /**
     * @param id
     * @return
     */
    List<DirectoryTree> getDirectoryTree(Long id);

    /**
     *
     * @param attachments 附件集合
     * @param source      来源  根据 DirectoryTypeEnum
     * @param relationId  业务id
     * @param sourceId    如果一个表单有多个附件，用于标识附件属于表单的哪个附件
     * @param  projectNumbers 项目编号 全局唯一 可传多个
     */
    void saveProAttachment(List<AttachmentDto> attachments, String source, String relationId, String sourceId, String[] projectNumbers);

    /**
     * 保存附件项目相关的公共方法
     *
     * @param attachments 附件集合
     * @param source      来源  根据 DirectoryTypeEnum
     * @param relationId  业务id
     * @param sourceId    如果一个表单有多个附件，用于标识附件属于表单的哪个附件
     * @param  projectNumber 项目编号 全局唯一
     */
    void saveProAttachment(List<AttachmentDto> attachments, String source, String relationId, String sourceId, String projectNumber);

    /**
     * 保存附件 非项目相关 文件夹部分固定的 可以增加文件夹
     * @param attachments 附件集合
     * @param source  来源  根据 DirectoryTypeEnum
     * @param relationId 业务id
     * @param sourceId 如果一个表单有多个附件，用于标识附件属于表单的哪个附件
     * @param dir  需要创建文件夹的名称
     */
    void saveAttachment(List<AttachmentDto> attachments, String source, String relationId, String sourceId, String dir);

    /**
     * 知识库文件上传保存附件
     * @param attachmentDto
     */
    void saveAttachment(AttachmentDto attachmentDto);

    /**
     * 删除
     * @param
     */
    void removeAttachment(String source, String relationId);
}
